/**
 * 对话处理和格式化工具函数
 */
import { ChatMessage } from '../core/types.ts';

/**
 * 生成唯一ID的辅助函数
 * @returns 生成的唯一ID字符串
 */
export function generateUniqueId(): string {
    return Date.now().toString(36) + Math.random().toString(36).substr(2);
}

/**
 * 将对话按轮次分组（一轮包含用户问题和AI回答）
 * @param messages 消息列表
 * @returns 按轮次分组后的消息列表
 */
export function groupMessagesByTurn(messages: ChatMessage[]): ChatMessage[][] {
    const turns: ChatMessage[][] = [];
    const systemMessages: ChatMessage[] = [];
    const userAssistantMessages: ChatMessage[] = [];

    // 先将消息分成系统消息和用户/助手消息
    for (const message of messages) {
        if (message.role === 'system') {
            systemMessages.push(message);
        } else {
            userAssistantMessages.push(message);
        }
    }

    // 处理用户/助手消息
    for (let i = 0; i < userAssistantMessages.length; i += 2) {
        // 一组包含用户消息和AI响应
        if (i + 1 < userAssistantMessages.length) {
            turns.push([userAssistantMessages[i], userAssistantMessages[i + 1]]);
        } else {
            // 最后一条消息可能没有配对的响应
            turns.push([userAssistantMessages[i]]);
        }
    }

    // 如果有系统消息，将它们添加为单独的一组
    if (systemMessages.length > 0) {
        turns.unshift(systemMessages);
    }

    return turns;
}

/**
 * 创建一个新的用户消息
 * @param content 消息内容
 * @returns 创建的用户消息对象
 */
export function createUserMessage(content: string): ChatMessage {
    return {
        role: 'user',
        content
    };
}

/**
 * 创建一个新的AI助手消息
 * @param content 消息内容
 * @returns 创建的AI助手消息对象
 */
export function createAssistantMessage(content: string): ChatMessage {
    return {
        role: 'assistant',
        content
    };
}

/**
 * 创建一个新的系统消息
 * @param content 消息内容
 * @returns 创建的系统消息对象
 */
export function createSystemMessage(content: string): ChatMessage {
    return {
        role: 'system',
        content
    };
}

/**
 * 将文本按照指定的平均词数分割成多个块
 * 用于模拟打字效果
 * 
 * @param text 要分割的文本
 * @param avgWordsPerChunk 每块的平均词数
 * @returns 分割后的文本块数组
 */
export function splitIntoChunks(text: string, avgWordsPerChunk: number): string[] {
    const chunks: string[] = [];
    const words = text.split(' ');

    let currentChunk = '';
    let wordCount = 0;

    for (const word of words) {
        currentChunk += (currentChunk ? ' ' : '') + word;
        wordCount++;

        // 使用一些随机性来模拟更自然的打字
        if (wordCount >= avgWordsPerChunk - 1 + Math.floor(Math.random() * 3)) {
            chunks.push(currentChunk);
            currentChunk = '';
            wordCount = 0;
        }
    }

    // 添加剩余文本
    if (currentChunk) {
        chunks.push(currentChunk);
    }

    return chunks;
}

/**
 * 根据提示生成初始响应文本
 * 用于在真实API响应前提供初步反馈
 * 
 * @param prompt 用户提示
 * @returns 生成的初始响应文本
 */
export function generateInitialResponse(prompt: string): string {
    // 根据提示中的关键词选择不同的初始响应
    if (prompt.toLowerCase().includes('角色') || prompt.toLowerCase().includes('人物')) {
        return '正在分析您的角色设定需求...';
    } else if (prompt.toLowerCase().includes('情节') || prompt.toLowerCase().includes('剧情')) {
        return '正在思考情节发展建议...';
    } else if (prompt.toLowerCase().includes('对话') || prompt.toLowerCase().includes('台词')) {
        return '正在构思对话优化方案...';
    } else if (prompt.toLowerCase().includes('场景') || prompt.toLowerCase().includes('环境')) {
        return '正在创建场景描述建议...';
    } else {
        return '正在思考您的问题...';
    }
} 